package main

import (
	"bufio"
	"encoding/json"
	"fmt"
	"io"
	"os"
	"strings"
	"time"
)

func main() {

	readFile()

}

func writeFile() () {

	path := "C:\\Users\\55219\\Desktop\\test.txt"

	//O_RDONLY int = syscall.O_RDONLY // 只读模式打开文件
	//O_WRONLY int = syscall.O_WRONLY // 只写模式打开文件
	//O_RDWR   int = syscall.O_RDWR   // 读写模式打开文件
	//O_APPEND int = syscall.O_APPEND // 写操作时将数据附加到文件尾部
	//O_CREATE int = syscall.O_CREAT  // 如果不存在将创建一个新文件
	//O_EXCL   int = syscall.O_EXCL   // 和O_CREATE配合使用，文件必须不存在
	//O_SYNC   int = syscall.O_SYNC   // 打开文件用于同步I/O
	//O_TRUNC  int = syscall.O_TRUNC  // 如果可能，打开时清空文件

	file, e := os.OpenFile(path, os.O_CREATE|os.O_APPEND|os.O_RDWR, 0644)

	if e != nil {

		fmt.Println(e)

	}

	for i := 0; i < 10; i++ {

		//str := fmt.Sprintf("i = %d \n" , i)

		fd_time := time.Now().Format("2006-01-02 15:04:05");
		fd_content := strings.Join([]string{"======", fd_time, "=====", fmt.Sprintf("%s-%d", "str-", i), "\n"}, "")

		file.Write([] byte(fd_content))

		file.Sync()

	}

}

func readFile() () {

	path := "C:\\Users\\admin\\Desktop\\4px物流渠道.txt"

	//O_RDONLY int = syscall.O_RDONLY // 只读模式打开文件
	//O_WRONLY int = syscall.O_WRONLY // 只写模式打开文件
	//O_RDWR   int = syscall.O_RDWR   // 读写模式打开文件
	//O_APPEND int = syscall.O_APPEND // 写操作时将数据附加到文件尾部
	//O_CREATE int = syscall.O_CREAT  // 如果不存在将创建一个新文件
	//O_EXCL   int = syscall.O_EXCL   // 和O_CREATE配合使用，文件必须不存在
	//O_SYNC   int = syscall.O_SYNC   // 打开文件用于同步I/O
	//O_TRUNC  int = syscall.O_TRUNC  // 如果可能，打开时清空文件

	file, _ := os.OpenFile(path, os.O_CREATE|os.O_APPEND|os.O_RDWR, 0644)

	/*b := make([] byte, 1024*8)

	if n, e := file.Read(b); e != io.EOF && n != 0 {

		fmt.Println(string(b[:n]))
	}*/

	//获取所有
	//n, e := file.Read(b)

	reader := bufio.NewReaderSize(file, 1024*8*8)

	maps := make([]map[string]string, 0)

	for ; ; {
		bytes, err := reader.ReadString('\n');

		//EOF是Read在没有更多输入可用时返回的错误。
		if err != nil && err == io.EOF {

			break

		}

		fmt.Println(bytes)

		split := strings.Split(strings.ReplaceAll(bytes,"\r\n",""),"=" )

		maps = append(maps, map[string]string{"code": split[0], "name": split[1]})



	}
	bytes, _ := json.Marshal(maps)
	fmt.Println(string(bytes))

	defer file.Close()
}
